#pragma once
#ifndef Game_GameEngine_IGameEngine_h
#define Game_GameEngine_IGameEngine_h

namespace Game {

namespace Common {
class EntityLogicManager;
class SceneManager;
}

namespace GameEngine {

using namespace std;
using namespace Game::Common;

class IGameEngine {
public:
    virtual ~IGameEngine() = 0 {};

    virtual EntityLogicManager* GetGameLogicManager() const = 0;
    virtual SceneManager* GetSceneManager() const = 0;

    virtual void Finalize() = 0;
    virtual void Initialize() = 0;
    virtual void Update(const double& fTime, const float& fElapsedTime) = 0;

    static void CALLBACK FrameMoveCallback(double fTime, float fElapsedTime, void* pUserContext) {
        return static_cast<IGameEngine*>(pUserContext)->Update(fTime, fElapsedTime);
    };
};

}
}

#endif
